import request from '@/utils/request';
import {API_MATCH} from './config';

/**
 * 匹配查询参数接口
 * 统一三个页面的查询参数
 */
export interface MatchQueryParams {
    pageNum?: number;
    pageSize?: number;
    supplierName?: string;
    orderNumber?: string;
    documentNumber?: string;
    invoiceCode?: string;
    receiptCode?: string;
    orderCode?: string;
    customerName?: string;
    status?: string;
    matchResult?: string;
    matchStatus?: string;
    startDate?: string;
    endDate?: string;
    createTimeStart?: string;
    createTimeEnd?: string;
}

// /**
//  * 匹配详情接口
//  */
// export interface MatchData {
//     id?: string;
//     matchCode?: string;
//     invoiceId?: string;
//     invoiceCode?: string;
//     receiptId?: string;
//     receiptCode?: string;
//     orderId?: string;
//     orderCode?: string;
//     customerName?: string;
//     customerCode?: string;
//     invoiceAmount?: number;
//     receiptAmount?: number;
//     orderAmount?: number;
//     status?: string;
//     differenceReason?: string;
//     remark?: string;
//     createBy?: string;
//     createTime?: string;
//     updateBy?: string;
//     updateTime?: string;
// }

/**
 * 获取匹配统计数据
 * @param params 查询参数，可以包含日期范围、供应商等筛选条件
 */
export function getMatchStatistics(params?: {
    startDate?: string;
    endDate?: string;
    supplierName?: string;
    documentType?: string;
}) {
    return request({
        url: API_MATCH.STATISTICS,
        method: 'get',
        params
    });
}

/**
 * 获取匹配详情
 * @param id 匹配ID
 */
export function getMatchDetail(id: string) {
    return request({
        url: API_MATCH.DETAIL(id),
        method: 'get'
    });
}

/**
 * 创建匹配
 * @param data 匹配数据
 */
export function createMatch(data: {
    invoiceId: string;
    receiptId: string;
    orderId: string;
    differenceReason?: string;
    remark?: string;
}) {
    return request({
        url: API_MATCH.CREATE,
        method: 'post',
        params: {
            orderId: data.orderId,
            receiptId: data.receiptId,
            invoiceId: data.invoiceId,
            differenceReason: data.differenceReason,
            remark: data.remark
        }
    });
}

// /**
//  * 更新匹配
//  * @param id 匹配ID
//  * @param data 匹配数据
//  */
// export function updateMatch(id: string, data: Partial<MatchData>) {
//     return request({
//         url: API_MATCH.UPDATE(id),
//         method: 'put',
//         data
//     });
// }

/**
 * 删除匹配
 * @param id 匹配ID
 */
export function deleteMatch(id: string) {
    return request({
        url: API_MATCH.DELETE(id),
        method: 'delete'
    });
}

/**
 * 批量删除匹配
 * @param ids 匹配ID数组
 */
export function batchDeleteMatch(ids: string[]) {
    return request({
        url: API_MATCH.BATCH_DELETE,
        method: 'delete',
        data: {ids}
    });
}

/**
 * 自动匹配（根据单号）
 * @param data 匹配参数
 */
// export function autoMatchByCode(data: {
//     invoiceCode?: string;
//     receiptCode?: string;
//     orderCode?: string;
// }) {
//     return request({
//         url: API_MATCH.AUTO,
//         method: 'post',
//         data
//     });
// }

/**
 * 导出匹配数据
 * @param params 查询参数
 */
export function exportMatch(params: MatchQueryParams) {
    return request({
        url: `${API_MATCH.BASE}/export`,
        method: 'get',
        params,
        responseType: 'blob',
        headers: {
            'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        }
    });
}

// /**
//  * 自动匹配
//  * @param invoiceId 发票ID
//  * @returns 匹配结果
//  */
// export function autoMatch(invoiceId: string) {
//     return request({
//         url: `${API_MATCH.BASE}/auto-match`,
//         method: 'post',
//         params: {
//             invoiceId
//         }
//     });
// }

/**
 * 全局自动匹配
 * 自动查找数据库中可以匹配的订单、收货单和发票并执行匹配
 * @returns 匹配结果列表
 */
export function globalMatch() {
    return request({
        url: `${API_MATCH.BASE}/global-match`,
        method: 'post'
    });
}

/**
 * 获取可三单匹配的订单列表（未在三单匹配表中的订单）
 * @param params 查询参数
 * @returns 可匹配的订单列表
 */
export function getOrdersAvailableForMatch(params: {
    pageNum?: number;
    pageSize?: number;
    supplierName?: string;
    orderNumber?: string;
    startDate?: string;
    endDate?: string;
    orderStatus?: string;
    status?: string;
}) {
    return request({
        url: `${API_MATCH.BASE}/available-orders`,
        method: 'get',
        params
    });
}

/**
 * 获取已完成三单匹配的订单列表
 * @param params 查询参数
 * @returns 已匹配的订单列表
 */
export function getMatchedOrders(params: {
    pageNum?: number;
    pageSize?: number;
    supplierName?: string;
    orderNumber?: string;
    matchResult?: string;
    startDate?: string;
    endDate?: string;
}) {
    return request({
        url: `${API_MATCH.BASE}/matched-orders`,
        method: 'get',
        params
    });
}

/**
 * 获取可用于匹配的收货单和发票
 * @returns 可用于匹配的收货单和发票列表
 */
export function getAvailableReceiptsAndInvoices() {
    return request({
        url: `${API_MATCH.BASE}/available-documents`,
        method: 'get'
    });
}

/**
 * 获取可与指定订单匹配的收货单和发票
 * @param orderId 订单ID
 * @returns 可匹配的收货单和发票
 */
export function getMatchCandidates(orderId: string) {
    return request({
        url: API_MATCH.MATCH_CANDIDATES(orderId),
        method: 'get'
    }).then(response => {
        if (response && response.code === 200) {
            // 确保receipts和invoices都存在，如果不存在则初始化为空数组
            if (!response.data.receipts) {
                console.warn('API响应中缺少receipts字段，初始化为空数组');
                response.data.receipts = [];
            }
            if (!response.data.invoices) {
                console.warn('API响应中缺少invoices字段，初始化为空数组');
                response.data.invoices = [];
            }
        }
        return response;
    }).catch(error => {
        console.error('getMatchCandidates API调用失败:', error);
        throw error;
    });
}

/**
 * 获取匹配页面数据
 * @param params 查询参数
 * @returns 匹配数据列表
 */
export function getMatchPage(params: MatchQueryParams) {
    return request({
        url: API_MATCH.PAGE,
        method: 'get',
        params
    });
}

// /**
//  * 获取供应商匹配准确率
//  * @returns 供应商匹配准确率数据
//  */
// export function getSupplierMatchRate() {
//     return request({
//         url: `${API_MATCH.BASE}/supplier-rate`,
//         method: 'get'
//     });
// }

/**
 * 获取匹配结果趋势
 * @returns 按月度统计的匹配结果趋势
 */
export function getMatchTrend() {
    return request({
        url: `${API_MATCH.BASE}/trend`,
        method: 'get'
    });
}

/**
 * 统一匹配服务类
 * 整合三单匹配页面、匹配管理页面和可匹配订单页面的所有API接口
 */
export class MatchService {
    /**
     * 获取匹配记录列表
     * @param params 查询参数
     * @returns 匹配记录列表
     */
    static getMatchPage(params: MatchQueryParams) {
        return getMatchPage(params);
    }

    /**
     * 获取匹配详情
     * @param id 匹配ID
     * @returns 匹配详情
     */
    static getMatchDetail(id: string) {
        return getMatchDetail(id);
    }

    /**
     * 创建匹配
     * @param orderId 订单ID
     * @param receiptId 收货单ID
     * @param invoiceId 发票ID
     * @param differenceReason 差异原因
     * @param remark 备注
     * @returns 匹配结果
     */
    static createMatch(orderId: string, receiptId: string, invoiceId: string, differenceReason?: string, remark?: string) {
        return createMatch({
            orderId,
            receiptId,
            invoiceId,
            differenceReason,
            remark
        });
    }

    // /**
    //  * 更新匹配
    //  * @param id 匹配ID
    //  * @param data 匹配数据
    //  * @returns 更新结果
    //  */
    // static updateMatch(id: string, data: Partial<MatchData>) {
    //     return updateMatch(id, data);
    // }

    /**
     * 删除匹配
     * @param id 匹配ID
     * @returns 删除结果
     */
    static deleteMatch(id: string) {
        return deleteMatch(id);
    }

    /**
     * 批量删除匹配
     * @param ids 匹配ID数组
     * @returns 批量删除结果
     */
    static batchDeleteMatch(ids: string[]) {
        return batchDeleteMatch(ids);
    }

    /**
     * 全局自动匹配
     * 自动查找数据库中可以匹配的订单、收货单和发票并执行匹配
     * @returns 匹配结果列表
     */
    static globalMatch() {
        return globalMatch();
    }

    /**
     * 获取可匹配订单列表
     * @param params 查询参数
     * @returns 可匹配的订单列表
     */
    static getAvailableOrders(params: MatchQueryParams) {
        return getOrdersAvailableForMatch(params);
    }

    // /**
    //  * 获取已匹配订单列表
    //  * @param params 查询参数
    //  * @returns 已匹配的订单列表
    //  */
    // static getMatchedOrders(params: MatchQueryParams) {
    //     return getMatchedOrders(params);
    // }

    /**
     * 获取匹配候选项
     * @param orderId 订单ID
     * @returns 可匹配的收货单和发票
     */
    static getMatchCandidates(orderId: string) {
        return getMatchCandidates(orderId);
    }

    /**
     * 导出匹配数据
     * @param params 查询参数
     * @returns Blob数据流
     */
    static exportMatch(params: MatchQueryParams) {
        return exportMatch(params);
    }

    /**
     * 获取匹配统计数据
     * @param params 查询参数，可以包含日期范围、供应商等筛选条件
     * @returns 匹配统计数据
     */
    static getMatchStatistics(params?: {
        startDate?: string;
        endDate?: string;
        supplierName?: string;
        documentType?: string;
    }) {
        return getMatchStatistics(params);
    }

    // /**
    //  * 自动匹配（根据发票ID）
    //  * @param invoiceId 发票ID
    //  * @returns 匹配结果
    //  */
    // static autoMatch(invoiceId: string) {
    //     return autoMatch(invoiceId);
    // }

    // /**
    //  * 自动匹配（根据单号）
    //  * @param data 匹配参数
    //  * @returns 匹配结果
    //  */
    // static autoMatchByCode(data: {
    //     invoiceCode?: string;
    //     receiptCode?: string;
    //     orderCode?: string;
    // }) {
    //     return autoMatchByCode(data);
    // }

    // /**
    //  * 获取供应商匹配准确率
    //  * @returns 供应商匹配准确率数据
    //  */
    // static getSupplierMatchRate() {
    //     return getSupplierMatchRate();
    // }
    //
    // /**
    //  * 获取匹配结果趋势
    //  * @returns 匹配结果趋势数据
    //  */
    // static getMatchTrend() {
    //     return getMatchTrend();
    // }
}

// export default MatchService;